package com.spsa.negocio.gestores;

import java.util.Date;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import com.spsa.excepciones.ActualizarDatosException;
import com.spsa.excepciones.EliminarDatosException;
import com.spsa.excepciones.GuardarDatosException;
import com.spsa.excepciones.RecuperarDatosException;
import com.spsa.excepciones.ServicioException;
import com.spsa.negocio.utilidades.SingletonDatos;
import com.spsa.persistencia.dao.UsuarioDao;
import com.spsa.persistencia.entidades.Usuario;

@Stateless
public class GestorUsuarios {
	@EJB
	private SingletonDatos singletonDatos;
	@EJB
	private UsuarioDao usuarioDao;

	public Usuario buscar(String username, String password) throws ServicioException{
		try {
			return usuarioDao.buscar(username, password);
		}
		catch(RecuperarDatosException e) {
			throw new ServicioException(e.getMessage());
		}
	}
	
	public void registrar(Usuario usuario) throws ServicioException{
		try {
			if(usuarioDao.existe(usuario.getCodigo()))
				throw new ServicioException("Ya existe un usuario registrado con el mismo codigo");
			
			usuario.setFechaRegistro(new Date());
			
			usuarioDao.guardar(usuario);
			singletonDatos.cargarDatosUsuarios();
		}
		catch(GuardarDatosException e) {
			throw new ServicioException("No se pudo registrar el Usuario");
		} catch (RecuperarDatosException e) {
			throw new ServicioException("No se pudo registrar el Usuario");
		}
	}
	
	public void actualizar(Usuario usuario) throws ServicioException{
		try {
			if(!usuarioDao.existe(usuario.getCodigo()))
				throw new ServicioException("El usuario que desea actualizar no esta registrada en la BD");
			
			usuarioDao.actualizar(usuario);
			singletonDatos.cargarDatosUsuarios();
			
		}
		catch(ActualizarDatosException e) {
			throw new ServicioException("No se pudo actualizar los datos de la Tienda");
		}
		catch(RecuperarDatosException e) {
			throw new ServicioException("No se pudo conectar a la BD");
		}
	}

	public void eliminar(Usuario usuario) throws ServicioException {
		try {
			usuarioDao.eliminar(usuario);
			singletonDatos.cargarDatosUsuarios();
		}
		catch(EliminarDatosException e) {
			throw new ServicioException("No se pudo eliminar el usuario");
		}
	}
}
